package com.tabnet.form;

import java.util.HashMap;

import javax.servlet.http.HttpServletRequest;

import com.tabnet.beans.personnes.Fournisseur;
import com.tabnet.dao.DAOException;
import com.tabnet.dao.DAOFournisseur;

public final class ConnexionFournForm {
    private static final String CHAMP_EMAIL  = "email";
    private static final String CHAMP_PASS   = "motdepasse";

    private String              resultat;
    private HashMap<String, String> erreurs      = new HashMap<String, String>();
    
    private DAOFournisseur fournDao;
    
    public ConnexionFournForm(DAOFournisseur fournDao){
    	this.fournDao = fournDao;
    }

    public String getResultat() {
        return resultat;
    }

    public HashMap<String, String> getErreurs() {
        return erreurs;
    }

    /**
     * Méthode qui rempli les données du fournisseur qui s'est connecté
     * @param request
     * @return Fournisseur , null si mauvaise connexion
     * @throws DAOException
     */
    public Fournisseur connecterFourn( HttpServletRequest request ) throws DAOException {
        /* Récupération des champs du formulaire */
        String email = getValeurChamp( request, CHAMP_EMAIL );
        String motDePasse = getValeurChamp( request, CHAMP_PASS );

        Fournisseur fourn = fournDao.trouverFourn(fournDao.verificationMdp(email, motDePasse));

        if(fourn == null){
        	fourn = new Fournisseur();
        	fourn.set_Mail(email);
        	fourn.set_Mdp(motDePasse);
        	
        	setErreur( CHAMP_EMAIL, "Adresse e-mail ou mot de passe incorrecte" );
        }

        /* Initialisation du résultat global de la validation. */
        if ( erreurs.isEmpty() ) {
            resultat = "Succès de la connexion.";
        } else {
            resultat = "Échec de la connexion.";
        }

        return fourn;
    }

    /**
     * Ajoute un message correspondant au champ spécifié à la map des erreurs.
     * @param champ
     * @param message
     */
    private void setErreur( String champ, String message ) {
        erreurs.put( champ, message );
    }

    /**
     * Méthode utilitaire qui retourne null si un champ est vide, et son contenu
     * sinon.
     * @param request
     * @param nomChamp
     * @return String valeur du champ
     */
    private static String getValeurChamp( HttpServletRequest request, String nomChamp ) {
        String valeur = request.getParameter( nomChamp );
        if ( valeur == null || valeur.trim().length() == 0 ) {
            return null;
        } else {
            return valeur;
        }
    }
}
